package com.common.jedis;

import redis.clients.jedis.Jedis;

import java.util.Set;

/**
 *redis增删改查类
 */
public class RedisManager {

	// 缓存过期时间，默认30分钟
	private int expire = 1800;

	/**
	 * get value from redis
	 * @param key
	 * @return
	 */
	public byte[] get(int db_index, byte[] key){
		byte[] value = null;
		Jedis jedis = JedisPoolManager.getMgr().getResource();
		try{
			jedis.select(db_index);
			value = jedis.get(key);
		}finally{
			JedisPoolManager.returnResource(jedis);
		}
		return value;
	}
	
	/**
	 *
	 * @param db_index
	 * @param key
	 * @param value
	 * @return
	 */
	public byte[] set(int db_index ,byte[] key,byte[] value){
		Jedis jedis = JedisPoolManager.getMgr().getResource();
		try{
			jedis.select(db_index);
			jedis.set(key,value);
			if(this.expire != 0){
				jedis.expire(key, this.expire);
		 	}
		}finally{
			JedisPoolManager.returnResource(jedis);
		}
		return value;
	}
	
	/**
	 * set 
	 * @param key
	 * @param value
	 * @param expire 过期时间
	 * @return
	 */
	public byte[] set(int db_index,byte[] key,byte[] value,int expire){
		Jedis jedis = JedisPoolManager.getMgr().getResource();
		try{
			jedis.select(db_index);
			jedis.set(key,value);
			if(expire != 0){
				jedis.expire(key, expire);
		 	}
		}finally{
			JedisPoolManager.returnResource(jedis);
		}
		return value;
	}
	
	/**
	 * del
	 * @param key
	 */
	public void del(int db_index,byte[] key){
		Jedis jedis = JedisPoolManager.getMgr().getResource();
		try{
			jedis.select(db_index);
			jedis.del(key);
		}finally{
			JedisPoolManager.returnResource(jedis);
		}
	}
	
	/**
	 * flush
	 */
	public void flushDB(int db_index){
		Jedis jedis = JedisPoolManager.getMgr().getResource();
		try{
			jedis.select(db_index);
			jedis.flushDB();
		}finally{
			JedisPoolManager.returnResource(jedis);
		}
	}
	
	/**
	 * size
	 */
	public Long dbSize(int db_index){
		Long dbSize = 0L;
		Jedis jedis = JedisPoolManager.getMgr().getResource();
		try{
			jedis.select(db_index);
			dbSize = jedis.dbSize();
		}finally{
			JedisPoolManager.returnResource(jedis);
		}
		return dbSize;
	}

	/**
	 * keys
	 * @param pattern
	 * @return
	 */
	public Set<byte[]> keys(int db_idex,String pattern){
		Set<byte[]> keys = null;
		Jedis jedis = JedisPoolManager.getMgr().getResource();
		try{
			jedis.select(db_idex);
			keys = jedis.keys(pattern.getBytes());
		}finally{
			JedisPoolManager.returnResource(jedis);
		}
		return keys;
	}
	


	public int getExpire() {
		return expire;
	}

	public void setExpire(int expire) {
		this.expire = expire;
	}

}
